package com.mikufufu.blog.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import java.util.Locale;

/**
 * 国际化语言工具类
 */
@Slf4j
@Component
public class I18Utils {

    private static MessageSource messageSource;

    @Autowired
    public I18Utils(MessageSource messageSource) {
        I18Utils.messageSource = messageSource;
    }

    /**
     * 根据消息键和参数 获取消息
     *
     * @param code 消息键
     * @param locale 语言
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String getMessage(String code, Locale locale, Object... args) {
        log.debug("code: {}, locale: {}, args: {}", code, locale, args);
        return messageSource.getMessage(code, args, locale);
    }

    /**
     * 根据消息键和参数 获取消息
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String getMessage(String code, Object... args) {
        return getMessage(code, LocaleContextHolder.getLocale(), args);
    }

    /**
     * 根据消息键和参数 获取消息
     *
     * @param code 消息键
     * @param locale 语言
     * @param defaultMessage 默认消息
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String getMessage(String code, Locale locale,String defaultMessage, Object... args) {
        log.debug("code: {}, locale: {}, defaultMessage: {}, args: {}", code, locale, defaultMessage, args);
        return messageSource.getMessage(code, args,defaultMessage, locale);
    }

    /**
     * 根据消息键和参数 获取消息
     *
     * @param code 消息键
     * @param defaultMessage 默认消息
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String getMessage(String code,String defaultMessage, Object... args) {
        return getMessage(code, LocaleContextHolder.getLocale(),defaultMessage, args);
    }
}
